/**
 * 
 */
package com.rhf.ui.admin.actions.profil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.rhf.core.commons.logging.AppLog;
import com.rhf.core.commons.logging.AppLogManager;
import com.rhf.core.dto.UtilisateurVO;
import com.rhf.core.services.UtilisateurServices;
import com.rhf.ui.Utils;
import com.rhf.ui.admin.session.UserSession;
import com.rhf.ui.admin.session.UserSessionKey;

/**
 * @author fabiensaulnier
 * 
 */
public class ProfilAction extends Action {

	/**
	 * Objet d�crivant un utilisateur
	 */
	private UtilisateurVO utilisateurVO;

	/**
	 * Logger
	 */
	private AppLog appLog = AppLogManager.getUiLogger();

	/*
	 * (non-Javadoc)
	 * 
	 * @seeorg.apache.struts.action.Action#execute(org.apache.struts.action.
	 * ActionMapping, org.apache.struts.action.ActionForm,
	 * javax.servlet.http.HttpServletRequest,
	 * javax.servlet.http.HttpServletResponse)
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

		appLog.debug("Debut de l'action [Modifier profil]");

		ActionForward actionForward = null;
		String message;

		try {

			// R�cup�ration de l'identifiant de l'utilisateur dans la session
			UserSession userSession = (UserSession) request.getSession().getAttribute(UserSessionKey.USER_SESSION);
			int utilisateurId = userSession.getUtilsateurId();

			// Objet UtilisateurVO
			this.utilisateurVO = new UtilisateurVO();
			this.utilisateurVO.setUtilisateurId(utilisateurId);
			this.utilisateurVO.setLogin(Utils.stringValue(request.getParameter("login")));
			this.utilisateurVO.setEmail(Utils.stringValue(request.getParameter("email")));
			this.utilisateurVO.setNom(Utils.stringValue(request.getParameter("nom")));
			this.utilisateurVO.setPrenom(Utils.stringValue(request.getParameter("prenom")));

			// V�rifier si mot de passe modifier
			this.utilisateurVO.setMotDePasse(Utils.stringValue(request.getParameter("motdepasse")));

			// V�rifier si l'utilisateur existe
			if (UtilisateurServices.verifierExistenceUtilisateur(this.utilisateurVO)) {

				// Mettre OK en session
				this.initSession(request);

				// Mise � jour du profil
				UtilisateurServices.modifierUtilisateur(utilisateurVO);

				// Message de validation dans le request
				message = "Votre profil a bien �t� modifi�.";

				// Redirection / Mapping
				actionForward = mapping.findForward("success");

			} else {

				// Redirection
				actionForward = mapping.findForward("strong");

				// Message d'erreur dans le request
				message = "Une erreur est survenue lors de la modification du profil";
			}

			// Mise � jour du message dans le request
			request.setAttribute(Utils.REQUEST_MESSAGE, message);

		} catch (Exception e) {
			actionForward = mapping.findForward("error");
			appLog.error("Une erreur est survenue lors de la modificationd du profil", e);
			throw new Exception("Une erreur est survenue lors de la modification du profil", e);
		}

		appLog.debug("Fin de l'action [Modifier profil]");

		// Redirection
		String path = actionForward.getPath();
		ActionForward newActionForward = new ActionForward(actionForward);
		newActionForward.setPath(path);
		return newActionForward;
	}

	/**
	 * Initialise la session utilisateur
	 * 
	 * @param request
	 * @throws Exception
	 */
	private void initSession(HttpServletRequest request) throws Exception {

		// On r�cup�re l'objet session d�j� existant sinon on instancie un
		// nouveau
		UserSession userSession = (UserSession) request.getSession().getAttribute(UserSessionKey.USER_SESSION);
		if (userSession == null) {
			userSession = new UserSession();
		}

		// this.utilisateurVO = UtilisateurServices.recupererUtilisateur(login,
		// motDePasse);

		// Mise � jour de l'objet userSession
		userSession.setLogin(this.utilisateurVO.getLogin());
		userSession.setNomUilisateur(this.utilisateurVO.getNom());
		userSession.setPrenomUtilisateur(this.utilisateurVO.getPrenom());
		userSession.setUtilsateurId(this.utilisateurVO.getUtilisateurId());

		// Initialisation de la session
		request.getSession().setAttribute(UserSessionKey.USER_SESSION, userSession);
		this.appLog.debug("Initialisation de la session de l'utilisateur [" + this.utilisateurVO.getLogin() + "]");

	}
}
